"""
阈值配置文件
集中管理系统中所有的阈值设定
"""

# RAG系统阈值
class RAGThresholds:
    """RAG系统相关阈值"""
    
    # 重排序阈值
    DEFAULT_RERANK_THRESHOLD = 0.2  # 默认重排序相关性阈值（降低阈值，更宽松）
    MIN_RERANK_THRESHOLD = 0.05     # 最小重排序阈值
    MAX_RERANK_THRESHOLD = 0.9      # 最大重排序阈值
    
    # 检索阈值
    DEFAULT_TOP_K = 5               # 默认检索文档数量
    MIN_TOP_K = 1                   # 最小检索数量
    MAX_TOP_K = 20                  # 最大检索数量
    INITIAL_RETRIEVAL_MULTIPLIER = 2  # 初始检索倍数（用于重排序）
    
    # 上下文长度阈值
    MAX_CONTEXT_LENGTH = 8000       # 最大上下文长度
    MIN_CONTEXT_LENGTH = 100        # 最小上下文长度

# 知识库阈值
class KnowledgeBaseThresholds:
    """知识库相关阈值"""
    
    # 文档拆分阈值
    DEFAULT_CHUNK_SIZE = 500       # 默认文本块大小
    MIN_CHUNK_SIZE = 100            # 最小文本块大小
    MAX_CHUNK_SIZE = 4000           # 最大文本块大小
    
    DEFAULT_CHUNK_OVERLAP = 200     # 默认文本块重叠
    MIN_CHUNK_OVERLAP = 0           # 最小文本块重叠
    MAX_CHUNK_OVERLAP = 500         # 最大文本块重叠
    
    # 文件大小阈值
    MAX_FILE_SIZE_MB = 50           # 最大文件大小（MB）
    MIN_FILE_SIZE_KB = 1            # 最小文件大小（KB）
    
    # 文档数量阈值
    MAX_DOCUMENTS_PER_KB = 1000     # 每个知识库最大文档数
    MAX_CHUNKS_PER_DOCUMENT = 1000  # 每个文档最大文本块数

# 词嵌入阈值
class EmbeddingThresholds:
    """词嵌入相关阈值"""
    
    # 文本长度阈值
    MAX_TEXT_LENGTH = 8191          # 最大文本长度（OpenAI token限制）
    MIN_TEXT_LENGTH = 1             # 最小文本长度
    
    # 批量处理阈值
    MAX_BATCH_SIZE = 100            # 最大批量处理数量
    DEFAULT_BATCH_SIZE = 10         # 默认批量处理数量
    
    # 向量维度
    EMBEDDING_DIMENSION = 1536      # OpenAI text-embedding-ada-002 维度

# 模型阈值
class ModelThresholds:
    """模型相关阈值"""
    
    # 温度阈值
    DEFAULT_TEMPERATURE = 0.7       # 默认温度
    MIN_TEMPERATURE = 0.0           # 最小温度
    MAX_TEMPERATURE = 2.0           # 最大温度
    
    # 最大token阈值
    DEFAULT_MAX_TOKENS = 2000       # 默认最大token数
    MIN_MAX_TOKENS = 100            # 最小最大token数
    MAX_MAX_TOKENS = 8000           # 最大最大token数
    
    # 重试阈值
    MAX_RETRY_ATTEMPTS = 3          # 最大重试次数
    RETRY_DELAY_SECONDS = 1         # 重试延迟（秒）

# 缓存阈值
class CacheThresholds:
    """缓存相关阈值"""
    
    # 缓存时间阈值
    DEFAULT_CACHE_TTL = 3600        # 默认缓存时间（秒）
    MIN_CACHE_TTL = 60              # 最小缓存时间（秒）
    MAX_CACHE_TTL = 86400           # 最大缓存时间（秒）
    
    # 缓存大小阈值
    MAX_CACHE_SIZE_MB = 1000        # 最大缓存大小（MB）
    MAX_CACHE_ENTRIES = 10000       # 最大缓存条目数

# 性能阈值
class PerformanceThresholds:
    """性能相关阈值"""
    
    # 响应时间阈值
    MAX_RESPONSE_TIME_SECONDS = 30  # 最大响应时间（秒）
    WARNING_RESPONSE_TIME_SECONDS = 10  # 警告响应时间（秒）
    
    # 并发阈值
    MAX_CONCURRENT_REQUESTS = 100   # 最大并发请求数
    MAX_CONCURRENT_UPLOADS = 10     # 最大并发上传数
    
    # 内存阈值
    MAX_MEMORY_USAGE_MB = 2048      # 最大内存使用量（MB）
    WARNING_MEMORY_USAGE_MB = 1024  # 警告内存使用量（MB）

# 安全阈值
class SecurityThresholds:
    """安全相关阈值"""
    
    # 文件类型限制
    ALLOWED_FILE_EXTENSIONS = [
        '.txt', '.md', '.pdf', '.docx', '.doc', 
        '.csv', '.json', '.xml', '.html', '.htm'
    ]
    
    # 文件大小限制
    MAX_FILE_SIZE_MB = 50           # 最大文件大小（MB）
    MIN_FILE_SIZE_KB = 1            # 最小文件大小（KB）
    
    # 文件内容限制
    MAX_FILE_CONTENT_LENGTH = 10 * 1024 * 1024  # 最大文件内容长度（10MB）
    
    # 请求频率限制
    MAX_REQUESTS_PER_MINUTE = 60    # 每分钟最大请求数
    MAX_REQUESTS_PER_HOUR = 1000    # 每小时最大请求数

# 日志阈值
class LoggingThresholds:
    """日志相关阈值"""
    
    # 日志级别阈值
    DEFAULT_LOG_LEVEL = "INFO"      # 默认日志级别
    DEBUG_LOG_LEVEL = "DEBUG"       # 调试日志级别
    ERROR_LOG_LEVEL = "ERROR"       # 错误日志级别
    
    # 日志文件阈值
    MAX_LOG_FILE_SIZE_MB = 100      # 最大日志文件大小（MB）
    MAX_LOG_FILES = 10              # 最大日志文件数量
    
    # 日志保留阈值
    LOG_RETENTION_DAYS = 30         # 日志保留天数

# 验证阈值
class ValidationThresholds:
    """验证相关阈值"""
    
    # 字符串长度阈值
    MAX_STRING_LENGTH = 10000       # 最大字符串长度
    MIN_STRING_LENGTH = 1           # 最小字符串长度
    
    # 名称长度阈值
    MAX_NAME_LENGTH = 100           # 最大名称长度
    MIN_NAME_LENGTH = 1             # 最小名称长度
    
    # 描述长度阈值
    MAX_DESCRIPTION_LENGTH = 500    # 最大描述长度
    
    # 集合名称阈值
    MAX_COLLECTION_NAME_LENGTH = 50 # 最大集合名称长度
    MIN_COLLECTION_NAME_LENGTH = 1  # 最小集合名称长度

# 导出所有阈值类
__all__ = [
    'RAGThresholds',
    'KnowledgeBaseThresholds', 
    'EmbeddingThresholds',
    'ModelThresholds',
    'CacheThresholds',
    'PerformanceThresholds',
    'SecurityThresholds',
    'LoggingThresholds',
    'ValidationThresholds'
] 